#ifndef __HIKARI_HOBJ__
#define __HIKARI_HOBJ__

#include "hikari.h"

using namespace std;
using namespace irr;
using namespace scene;
class hComponent;

class HObj{
private:
	wstring name;
	scene::ISceneNode*node;
	AnimationData*animationData;
	bool updateable;
	vector<hComponent*>components;

public:
	HObj(scene::ISceneNode*node);
	virtual ~HObj(void);

	hComponent*getComponent(wstring&componentName);
	void addComponent(hComponent*component);
	vector<hComponent*>& getComponentList();
	bool enableComponent(wstring&componentName, bool enable);

	ISceneNode*getInternalNode(){
		return node;
	}

	bool isUpdateable(){
		return updateable;
	}

	void setUpdatealbe(bool updateable){
		this->updateable=updateable;
	}

	void setName(wstring&name){
		this->name=name;
	}	

	wstring&getName(){
		return name;
	}

	void setAnimationData(AnimationData*animData){
		animationData=animData;
	}

	virtual void animate(wstring&animationTrackName);
	virtual void setPosition(vector3df position);
	virtual void setRotation(vector3df rotation);
	virtual void setScale(vector3df scale);

	virtual void move(vector3df offset);
	virtual void moveX(float offset);
	virtual void moveY(float offset);
	virtual void moveZ(float offset);

	virtual vector3df getPosition();
	virtual vector3df getRotation();
	virtual vector3df getScale();
};


#endif